<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>

        // class 构造函数  可以通过 extends 这个关键字实现继承  这个通过修改原型链实现继承  继承父类所有的方法和属性 
        class Person{
            constructor(name,age){
                this.name = name;
                this.age = age;
            }

            // static  与this无关
            likes = "Eat , sleep"

            // prototype 原型对象
            say(){
                console.log(this.name,this.age)
            }

            skill(){
                // console.log("思想思考...")
                return "认真think-思考"
            }




        }
        Person.type = "human"

        // 继承父类所有的方法和属性 (constructor + prototype)
        // super   
        // super() 当作函数的时候指向的是父类的   构造函数  constructor
        // super   当作对象的时候指向的是父类的   原型对象  prototype
        class Student extends Person{
            // 不写 constructor  默认继承父类的 constructor super
            // constructor(name,age,grade){
            //     this.grade = grade;
            // }

            constructor(name,age,grade){
                super(name,age)    // 调用父类的 构造函数  等级 Person.call(this)
                this.grade  = grade;
            }

            // 方法新增  
            speak(){
                console.log(this.name,this.age,this.grade);
            }

            // 方法重载
            skill(){
                return "wh2107-daydayup"  + super.skill()
            }
        }

        console.dir(Student)

        var stu = new Student("小虎",20,100);
        console.log(stu.name);
        console.log(stu.age)
        stu.say()
        console.log(stu.grade)
        stu.speak();
        console.log(stu.skill())
    </script>
</body>
</html>